<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" >

<title>模型评估 - 百面机器学习 | 少数派报告</title>
<meta name="description" content="Minority Report">

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<link rel="shortcut icon" href="https://www.timegarage.works/favicon.ico?v=1577944220707">
<!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.css"> -->
<link rel="stylesheet" href="https://www.timegarage.works/styles/main.css">


  
    <link rel="stylesheet" href="https://unpkg.com/gitalk/dist/gitalk.css" />
  

  


<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.bootcss.com/highlight.js/9.12.0/highlight.min.js"></script>

<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />



  </head>
  <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
  <body>
    <div id="app" class="main">
      <div class="sidebar" :class="{ 'full-height': menuVisible }">
  <div class="top-container">
    <div class="top-header-container">
      <a class="site-title-container" href="https://www.timegarage.works">
        <img src="https://www.timegarage.works/images/avatar.png?v=1577944220707" class="site-logo">
        <h1 class="site-title">少数派报告</h1>
      </a>
      <div class="menu-btn" @click="menuVisible = !menuVisible">
        <div class="line"></div>
      </div>
    </div>
    <div>
      
        
          <a href="/" class="site-nav">
            首页
          </a>
        
      
        
          <a href="/archives" class="site-nav">
            归档
          </a>
        
      
        
          <a href="/tags" class="site-nav">
            标签
          </a>
        
      
        
          <a href="/post/Portfolio/" class="site-nav">
            作品
          </a>
        
      
        
          <a href="/post/about/" class="site-nav">
            关于
          </a>
        
      
    </div>
  </div>
  <div class="bottom-container">
    <div class="social-container">
      
        
      
        
      
        
      
        
      
        
      
    </div>
    <div class="site-description">
      Minority Report
    </div>
    <div class="site-footer">
      Copyright © 2020 TimeGarage Inc. | <a class="rss" href="https://www.timegarage.works/atom.xml" target="_blank">RSS</a>
    </div>
  </div>
</div>

      <div class="main-container">
        <div class="content-container" data-aos="fade-in">
          <div class="post-detail">
            <h2 class="post-title">模型评估 - 百面机器学习</h2>
            <div class="post-date">
              2019-11-16 
              <span id="busuanzi_container_page_pv">
                  &emsp;📖<span id="busuanzi_value_page_pv"></span>
              </span>
            </div>
            
            <div class="post-content">
              <p>模型评估指标与方法</p>
<!-- more -->
<h1 id="模型评估">模型评估</h1>
<h3 id="评估指标的局限性">评估指标的局限性</h3>
<ul>
<li>
<p>准确率的局限性</p>
<blockquote>
<p>当不同类别的样本比例非常不均衡时，占比大的类别往往成为影响准确率的最主要因素。</p>
</blockquote>
</li>
<li>
<p>精确率与召回率的权衡</p>
<ul>
<li>
<p>P-R曲线（Precision-&gt; 查准率 Recall -&gt; 查全率）</p>
</li>
<li>
<p>F1 score</p>
</li>
<li>
<p>ROC曲线</p>
</li>
</ul>
</li>
<li>
<p>平方根误差的意外</p>
<blockquote>
<p>在实际问题中，如果存在个别偏离程度非常大的离群点（Outlier）时，即使离群点数量非常少，也会让 RMSE 指标变得很差。</p>
</blockquote>
<ul>
<li>
<p>RMSE</p>
</li>
<li>
<p>解决方案</p>
<ul>
<li>
<p>如果确认离群点为噪声点 -&gt; 数据预处理阶段把噪声过滤掉</p>
</li>
<li>
<p>如果不认为这些离群点为噪声点 -&gt; 提高模型的预测能力 -&gt; 将离群点产生的机制建模进去</p>
</li>
<li>
<p>寻找一个更合适的评估指标来评估模型</p>
<ul>
<li>MAPE</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<blockquote>
<p>相比 RMSE，MAPE 相当于把每个点的误差进行了归一化，降低了个别离群点带来的绝对误差的影响。</p>
</blockquote>
<h3 id="roc曲线">ROC曲线</h3>
<ul>
<li>
<p>什么是ROC曲线</p>
<blockquote>
<p>ROC 曲线的横坐标为假阳性率（False Positive Rate，FPR）；纵坐标为真阳性率（True Positive Rate，TPR）</p>
</blockquote>
</li>
<li>
<p>如何绘制ROC曲线</p>
<ul>
<li>截断点/阈值</li>
</ul>
</li>
<li>
<p>如何计算AUC</p>
<ul>
<li>评价：AUC越大，说明分类器性能越好。</li>
</ul>
</li>
<li>
<p>ROC曲线相比P-R曲线有什么特点</p>
</li>
</ul>
<h3 id="余弦距离的应用">余弦距离的应用</h3>
<ul>
<li>余弦相似度与欧式距离
<ul>
<li>相对差异 -&gt; 余弦相似度</li>
<li>绝对差异 -&gt; 欧式距离</li>
</ul>
</li>
<li>余弦距离是否是一个**<u>严格定义的距离</u>**
<ul>
<li>✅ 正定性
<ul>
<li>证明：定义</li>
</ul>
</li>
<li>✅对称性
<ul>
<li>证明：定义</li>
</ul>
</li>
<li>❌三角不等式
<ul>
<li>证明：单位元三个紧挨着的点 / 等腰直角三角形</li>
</ul>
</li>
</ul>
</li>
<li>KL（Kullback-Leibler Divergence）距离（又名相对熵）
<ul>
<li>✅正定性</li>
<li>❌对称性</li>
<li>❌三角不等式</li>
</ul>
</li>
</ul>
<h3 id="ab测试的陷阱">A/B测试的陷阱</h3>
<ul>
<li>为什么在对模型进行过充分的离线评估之后，还要进行在线的A/B测试？
<ul>
<li>离线评估无法完全消除模型过拟合的影响</li>
<li>离线评估无法完全还原线上的工程环境</li>
<li>线上系统的某些商业指标在离线评估中无法计算</li>
</ul>
</li>
<li>如何进行线上A/B测试？
<ul>
<li>实验组 ⬅️ 新模型</li>
<li>对照组 ⬅️ 旧模型</li>
<li>注意点：样本的独立性和采样方式的无偏性</li>
</ul>
</li>
<li>如何划分实验组和对照组</li>
</ul>
<h3 id="模型评估的方法">模型评估的方法</h3>
<ul>
<li>
<p>Holdout检验</p>
</li>
<li>
<p>交叉检验</p>
</li>
<li>
<p>自助法</p>
<blockquote>
<p>当样本数很大时，大约有 36.8% 的样本从未被选择过，可作为验证集。</p>
</blockquote>
</li>
</ul>
<h3 id="超参数有哪些调优方法">超参数有哪些调优方法</h3>
<ul>
<li>
<p>网格搜索</p>
<blockquote>
<p>通过查找搜索范围内的所有的点来确定最优值</p>
</blockquote>
</li>
<li>
<p>随机搜索</p>
</li>
<li>
<p>贝叶斯优化算法</p>
<blockquote>
<p>首先根据先验分布，假设一个搜集函数；然后，每一次使用新的采样点来测试目标函数时，利用这个信息来更新目标函数的先验分布；最后，算法测试由后验分布给出的全局最值最可能出现的位置的点。</p>
</blockquote>
</li>
</ul>
<h3 id="过拟合与欠拟合">过拟合与欠拟合</h3>
<ul>
<li>
<p>过拟合和欠拟合具体是指什么现象</p>
<ul>
<li>
<p>过拟合</p>
<blockquote>
<p>过拟合是指模型对于训练数据拟合呈过当的情况，反映到评估指标上，就是模型在训练集上的表现很好，但在测试集和新数据上的表现较差。</p>
</blockquote>
</li>
<li>
<p>欠拟合</p>
<blockquote>
<p>欠拟合指的是模型在训练和预测时表现都不好的情况。</p>
</blockquote>
</li>
</ul>
</li>
<li>
<p>降低过拟合和欠拟合风险的方法有哪些</p>
<ul>
<li>
<p>降低过拟合风险的方法</p>
<ul>
<li>
<p>获取更多的训练数据</p>
<blockquote>
<p>使用更多的训练数据是解决过拟合问题最有效的手段，因为更多的样本能够让模型学习到更多更有效的特征，减小噪声的影响。</p>
</blockquote>
<p>图像：平移、旋转、缩放、使用生成对抗网络合成新的训练数据</p>
</li>
<li>
<p>降低模型复杂度</p>
<blockquote>
<p>在数据较少时，模型过于复杂是产生过拟合的主要因素，适当降低模型复杂度可以避免模型拟合过多的采样噪声。</p>
</blockquote>
<p>例如，在神经网络模型中减少网络层数、神经元个数等；在决策树模型中降低树的深度、进行剪枝等。</p>
</li>
<li>
<p>正则化方法</p>
<blockquote>
<p>避免权值过大带来的过拟合风险</p>
</blockquote>
</li>
<li>
<p>集成学习</p>
<blockquote>
<p>将多个模型集成到一起，降低单一模型的过拟合风险。</p>
</blockquote>
</li>
</ul>
</li>
<li>
<p>降低欠拟合的方法</p>
<ul>
<li>
<p>添加新特征</p>
<blockquote>
<p>当特征不足或者现有特征与样本标签的相关性不强时，容易出现欠拟合。</p>
</blockquote>
<ul>
<li>因子分解机 FM</li>
<li>梯度提升决策树 GBDT</li>
<li>Deep-Crossing</li>
</ul>
</li>
<li>
<p>增加模型复杂度</p>
<ul>
<li>线性模型：添加高次项</li>
<li>神经网络模型：增加网络层数、神经元个数</li>
<li>减小正则化系数</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>

            </div>
            
              <div class="tag-container">
                
                  <a href="https://www.timegarage.works/tag/BMJQXX" class="tag">
                    百面机器学习
                  </a>
                
                  <a href="https://www.timegarage.works/tag/Notes" class="tag">
                    读书笔记
                  </a>
                
              </div>
            
            
              <div class="next-post">
                <div class="next">下一篇</div>
                <a href="https://www.timegarage.works/post/Note-FeatureEngineering">
                  <h3 class="post-title">
                    特征工程 - 百面机器学习
                  </h3>
                </a>
              </div>
            

            
              
                <div id="gitalk-container" data-aos="fade-in"></div>
              

              
            
          </div>
        </div>
      </div>
    </div>

    <script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script type="application/javascript">

AOS.init();

hljs.initHighlightingOnLoad()

var app = new Vue({
  el: '#app',
  data: {
    menuVisible: false,
  },
})

</script>



  
    <script src="https://unpkg.com/gitalk/dist/gitalk.min.js"></script>
    <script>

      var gitalk = new Gitalk({
        clientID: '447058976c8bd4fe04f6',
        clientSecret: 'b4a632203857b02425883cbf9b5bea3d5a2f86b0',
        repo: 'timegarage.github.io',
        owner: 'TimeGarage',
        admin: ['TimeGarage'],
        id: (location.pathname).substring(0, 49),      // Ensure uniqueness and length less than 50
        distractionFreeMode: false  // Facebook-like distraction free mode
      })

      gitalk.render('gitalk-container')

    </script>
  

  




  </body>
</html>
